package day3;
class Animal{
    protected String name;
    protected int age;

    public Animal(String name, int age) {
        this.name = name;
        this.age = age;
    }
    public void eat(){
        System.out.println("动物进食");
    }
    public void fun(){
        System.out.println("父类的方法");
    }
}
class cat extends Animal{
    //cat子类的构造方法
    public cat(String name, int age) {
        //先创建父类
        super(name, age);
    }
    //重写eat方法
    @Override
    public void eat() {
        System.out.println(this.name+"吃喵粮");;
    }
    public void mew(){
        System.out.println("小猫"+this.name+"正在喵喵叫");
    }
}

class bird extends Animal{
    public bird(String name, int age) {
        super(name, age);
    }

    @Override
    public void eat() {
        System.out.println("吃鸟粮");;
    }
    public void fly(){
        System.out.println("小鸟"+this.name+"正在飞");
    }
}
public class Demo1 {
    public static void main(String[] args) {
        //安全情况下的向下转型(当父类引用的对象是向下转型子类的一个实例时)
        //向上转型
//        Animal animal=new cat("大黄猫",5);
//        animal.eat();
//        System.out.println("---------------");
//        //向下转型
//        cat cat1=(cat)animal;
//        cat1.mew();
//        cat1.eat();
//        System.out.println("-----------------");

        //不安全情况下的向下转型(当父类引用的对象不是向下转型子类的一个实例时)
        //向上转型
        Animal animal2=new cat("小猫",5);
        animal2.fun();
        System.out.println("---------------");
        //向下转型
        if(animal2 instanceof bird){
            System.out.println("animal2是bird的一个实例 向下转型为bird");
            bird bird1=(bird) animal2;
            bird1.eat();
            bird1.fly();
        }else if(animal2 instanceof cat){
            System.out.println("animal2是cat的一个实例 向下转型为cat");
            cat cat2=(cat)animal2;
            cat2.eat();
            cat2.mew();
        }

        System.out.println("-----------------");
    }
}
